//==========================================================================
// Copyright (c) 2000-2008,  Elastos, Inc.  All Rights Reserved.
//==========================================================================

#ifndef __LIMITS_H__
#define __LIMITS_H__

#define MB_LEN_MAX    4         /* max. # bytes in multibyte char */

#define CHAR_BIT      8         /* number of bits in a char */

#define SCHAR_MIN     (-128)    /* minimum signed char value */
#define SCHAR_MAX     127       /* maximum signed char value */
#define UCHAR_MAX     0xff      /* maximum unsigned char value */

#ifndef __CHAR_UNSIGNED__
#define CHAR_MIN    SCHAR_MIN   /* mimimum char value */
#define CHAR_MAX    SCHAR_MAX   /* maximum char value */
#else  /* __CHAR_UNSIGNED__ */
#define CHAR_MIN      0
#define CHAR_MAX    UCHAR_MAX
#endif  /* __CHAR_UNSIGNED__ */

#define SHRT_BIT      16
#define SHRT_MIN      (-32768)      /* minimum (signed) short value */
#define SHRT_MAX      32767         /* maximum (signed) short value */
#define USHRT_MAX     0xffff        /* maximum unsigned short value */

#define INT_BIT       32
#define INT_MIN       (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX       2147483647    /* maximum (signed) int value */
#define UINT_MAX      0xffffffff    /* maximum unsigned int value */

#define LONG_BIT      32
#define LONG_MIN      (-2147483647L - 1) /* minimum (signed) long value */
#define LONG_MAX      2147483647L   /* maximum (signed) long value */
#define ULONG_MAX     0xffffffffUL  /* maximum unsigned long value */

#define LONG_LONG_BIT   64
#ifdef _GNUC
#define LONG_LONG_MIN  (-9223372036854775807LL - 1) /* minimum (signed)
                                                     * longlong value */
#define LONG_LONG_MAX  9223372036854775807LL /* maximum (signed) longlong
                                              * value */
#define ULONG_LONG_MAX 0xffffffffffffffffULL /* maximum unsigned
                                              * longlong value */
#else
#define LONG_LONG_MIN  (-9223372036854775807i64 - 1)    /* minimum
                                                         * signed 64 bit
                                                         * value */
#define LONG_LONG_MAX  9223372036854775807i64 /* maximum signed 64 bit
                                               * value */
#define ULONG_LONG_MAX 0xffffffffffffffffui64 /* maximum unsigned 64 bit
                                               * value */
#endif  //_GNUC

/* ISO C9x macro names */
#define LLONG_MAX LONG_LONG_MAX
#define LLONG_MIN LONG_LONG_MIN
#define ULLONG_MAX ULONG_LONG_MAX

/* MSVC compatibility */
#define _I64_MIN LONG_LONG_MIN
#define _I64_MAX LONG_LONG_MAX
#define _UI64_MAX ULONG_LONG_MAX

/* Elastos macro names */
#ifdef _GNUC
#define LLONG(x) x##LL
#define ULLONG(x) x##ULL
#else
#define LLONG(x) x##i64
#define ULLONG(x) x##ui64
#endif

#endif // __LIMITS_H__
